package com.zheng.upms.rpc.api;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.zheng.upms.dao.model.*;

import java.util.List;

/**
 * upms系统接口
 * Created by shuzheng on 2017/2/11.
 */
public interface UpmsApiService {

    /**
     * 根据用户id获取所拥有的权限(用户和角色权限合集)
     *
     * @param upmsUserId
     * @returncache
     */
    List<UpmsPermission> selectUpmsPermissionByUpmsUserId(Integer upmsUserId);

    /**
     * 根据用户id获取所拥有的权限(用户和角色权限合集)
     *
     * @param upmsUserId
     * @return
     */
    List<UpmsPermission> selectUpmsPermissionByUpmsUserIdByCache(Integer upmsUserId);

    /**
     * 根据用户id获取所属的角色
     *
     * @param upmsUserId
     * @return
     */
    List<UpmsRole> selectUpmsRoleByUpmsUserId(Integer upmsUserId);

    /**
     * 根据用户id获取所属的角色
     *
     * @param upmsUserId
     * @return
     */
    List<UpmsRole> selectUpmsRoleByUpmsUserIdByCache(Integer upmsUserId);

    /**
     * 根据角色id获取所拥有的权限
     *
     * @param upmsRoleId
     * @return
     */
    List<UpmsRolePermission> selectUpmsRolePermisstionByUpmsRoleId(Integer upmsRoleId);

    /**
     * 根据角色id获取所有系统权限
     *
     * @param upmsRoleId
     * @return
     */
    List<UpmsRoleSystem> selectUpmsRoleSystemByUpmsRoleId(Integer upmsRoleId);
    /**
     * 根据用户id获取所有角色系统权限
     *
     * @param userId
     * @return
     */
    List<UpmsRoleSystem> selectUpmsRoleSystemByUpmsUserId(Integer userId);

    /**
     * 根据用户id获取所有个人系统权限(包含加减所有列表，需要前台做处理)
     * @param userId
     * @return
     */
    List<UpmsUserSystem> selectUpmsUserSystemByUpmsUserId(Integer userId);

    /**
     * 根据用户id获取所拥有的权限
     *
     * @param upmsUserId
     * @return
     */
    List<UpmsUserPermission> selectUpmsUserPermissionByUpmsUserId(Integer upmsUserId);

    /**
     * 根据条件获取系统数据
     *
     * @param entityWrapper
     * @return
     */
    List<UpmsSystem> selectUpmsSystemByExample(EntityWrapper<UpmsSystem> entityWrapper);

    /**
     * 根据条件获取组织数据
     *
     * @param entityWrapper
     * @return
     */
    List<UpmsOrganization> selectUpmsOrganizationByExample(EntityWrapper<UpmsOrganization> entityWrapper);

    /**
     * 根据username获取UpmsUser
     *
     * @param username
     * @return
     */
    UpmsUser selectUpmsUserByUsername(String username);

    /**
     * 根据username获取UpmsOrganization
     *
     * @param username
     * @return
     */
    UpmsOrganization selectUpmsOrganizationByUsername(String username);

    /**
     * 写入操作日志
     *
     * @param record
     * @return
     */
    int insertUpmsLogSelective(UpmsLog record);

    /**
     * 获取全部部门和用户树状
     *
     * @param isUser 是否有用户
     * @return
     */
    JSONArray selectUpmsOrganizationAndUserTree(Boolean isUser, String username);


    void evictUpmsServiceCache();

    Wrapper dataScopeFilter(Wrapper wrapper, String username);

    Wrapper dataScopeFilter(Wrapper wrapper, UpmsUser user);

    String sqlDataScopeFilter(String username, String tableAlias, String userTableAlias);

    String sqlDataScopeFilter(UpmsUser user, String tableAlias, String userTableAlias);

}
